#include<iostream>
#include<list>
#include<string>
using namespace std;
//（1）先申请一块连续的内存空间，该段内存空间能够容纳一定数量的对象；
//（2）每个对象连同一个指向下一个对象的指针一起构成一个内存节点（Memory Node）。各个空闲的内存节点通过指针形成一个链表，链表的每一个内存节点都是一块可供分配的内存空间；
//（3）某个内存节点一旦分配出去，从空闲内存节点链表中去除；
//（4）一旦释放了某个内存节点的空间，又将该节点重新加入空闲内存节点链表；
//（5）如果一个内存块的所有内存节点分配完毕，若程序继续申请新的对象空间，则会再次申请一个内存块来容纳新的对象。新申请的内存块会加入内存块链表中。

template<typename T>
struct _Node{        //节点
    T Data;          //元素
    _Node<T>* next;  //指向下一个节点的指针
};

template <typename T, int BlockSize = 10>
class MemoryPool{
public:
   MemoryPool();
   ~MemoryPool();
   void* MemoryPoolMalloc();
   int MemoryPoolFree(void*p);
   _Node<T>* add;
    int head;
    int use;
private:  
    _Node<T>* MemoryHead;  //未使用的节点
    _Node<T>* UseHead;     //正在使用的节点


};

